package com.tungse.thread_join;

/**
 * @author tungse
 * join() 方法的主要作用是让当前线程等待调用 join() 方法的线程执行完毕后再继续执行。简单来说，就是将多个线程的执行顺序进行协调，确保一个线程在另一个线程完成后才开始执行
 */
public class JoinTest {
    // 1.现在有T1、T2、T3三个线程，你怎样保证T2在T1执行完后执行，T3在T2执行完后执行
    public static void main(String[] args) throws InterruptedException {
        final Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("t1");
            }
        });
        final Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 引用t1线程，等待t1线程执行完
                    t1.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("t2");
            }
        });
        Thread t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 引用t2线程，等待t2线程执行完
                    t2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("t3");
            }
        });

        t1.start();
        //Thread.sleep(1000);
        t3.start();//这里三个线程的启动顺序可以任意
        t2.start();


    }
}